package model;



import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
import java.util.ArrayList;
import java.util.Calendar;



public class Person {
	public final static String NY_AVTALE_PERSON = "NyAvtalePerson";
	public final static String FJERN_AVTALE_PERSON = "FjernAvtalePerson";
	
	protected PropertyChangeSupport pcs;
	
	private String navn;
	private ArrayList<Avtale> avtaler;
	
	
	public Person(){
		avtaler = new ArrayList<Avtale>();
		pcs = new PropertyChangeSupport(this);
	}
	
	public Person(String navn){
		this.navn = navn;
		avtaler = new ArrayList<Avtale>();
		pcs = new PropertyChangeSupport(this);
	}
	public Person(String navn, ArrayList<Avtale> avtaler){
		this.navn = navn;
		this.avtaler = avtaler;
		pcs = new PropertyChangeSupport(this);
	}
	
	public void addPropertyChangeListener(PropertyChangeListener listener) {
		pcs.addPropertyChangeListener(listener);
	}
	
	public String getNavn() {
		return navn;
	}
	public void setNavn(String navn) {
		this.navn = navn;
	}
	public ArrayList<Avtale> getAvtaler() {
		return avtaler;
	}
	public void setAvtaler(ArrayList<Avtale> avtaler) {
		this.avtaler = avtaler;
	}

	public void leggeTilAvtale(Avtale avtale){
		Avtale gammel = null;
		for(Avtale avt: avtaler){
			if(avt.getId() == avtale.getId()){
				if(avt.equals(avtale)){
					return;
				}
				gammel = avt;
			}
		}
		avtaler.remove(gammel);
		avtaler.add(avtale);
		pcs.firePropertyChange(NY_AVTALE_PERSON, gammel, avtale);		
	}
	
	public void fjernAvtale(Avtale avtale){
		for(Avtale avtale2: avtaler) {
			if (avtale2.getId() == avtale.getId()) {
				avtaler.remove(avtale2);
				pcs.firePropertyChange(FJERN_AVTALE_PERSON, avtale, null);
				break;
			}
		}
	}
	
	public ArrayList<Avtale> hentAvtalerIUke(int uke,int aar){
		ArrayList<Avtale> avtalerIUke = new ArrayList<Avtale>();
		for(Avtale avtale: avtaler){
			if(avtaleIUke(avtale, uke, aar)){
				avtalerIUke.add(avtale);
			}
		}
		return avtalerIUke;
	}
	
	private boolean avtaleIUke(Avtale avtale, int uke, int aar){
		Calendar avtaletid = avtale.getDato();
		if(avtaletid.get(Calendar.WEEK_OF_YEAR) == uke && avtaletid.get(Calendar.YEAR) == aar){
			return true;
		}
		return false;
	}	

	public String toString(){
		
		String txt = "\n";
		
		for(Avtale avtale: avtaler){
			
			txt += avtale.toString();
		}
		
		return txt;
	}

}
